/////////////////////////////////      拓展欧几里得
int exgcd(ll a,ll b,ll &x,ll &y){ //本质上是求解ax+by=c 的一个有效解c=a%b   !!!ax+by=c=gcd(a,b)=gcd(b,a%b)->p*x+(a%p)*y=c  ->x=y,y=x-a/b
	if(!b){ //当b为0时结束
		x=1,y=0;
		return a; //返回a与b的最大公约数
	}
	int ret=exgcd(b,a%b,x,y);
	int x0=y;
	int y0=x-a/b*y;
	x=x0;
	y=y0;
	
	return ret;
} 

//////////////////////////////////     线性求逆元 适合以1的速度递增固定mod

/*
题目描述
给定 n,p 求 1∼n 中所有整数在模 p 意义下的乘法逆元。

这里 a 模 p 的乘法逆元定义为 ax≡1(modp) 的解。

输入格式
一行两个正整数 n,p。

输出格式
输出 n 行，第 i 行表示 i 在模 p 下的乘法逆元。
*/
#include<bits/stdc++.h>
#define endl "\n";
#define ll long long
#define all(rq) rq.begin(),rq.end()

using namespace std;
const int INF=0x3f3f3f3f;

int main(){
	int n,p;
	cin>>n>>p;
	long long ny[n+1]={0};
	ny[1]=1;
	cout<<1<<endl;
	for(int i=2;i<=n;i++){ //p=k*i+r k=p/i r=p%i           k*i+r=0(mod p) => k*r^-1+i^-1=0(mod p) => i^-1=-k*r^-1(mod p) => i^-1=-k*(p%i)^-1(mod p) ///p%i<i
		ny[i]=(-p/i*ny[p%i]%p+p)%p;
		
		cout<<ny[i]<<endl;
	}
	return 0;
}

//////////////////////////////////   费马小定理求a在模p下的逆元 即为a^(p-2) 但p必须为质数 并且a与p也必须为互质

ll fpow(ll base,ll pow,ll mod){
	ll ans=1;
	while(pow){
		if(pow&1){
			ans*=base;
			ans%=mod;
		}
		base*=base;
		base%=mod;
		pow>>=1;
	}
	
	return ans;
}

int main(){
	ll n,p;
	cin>>n>>p;
	
	for(int i=1;i<=n;i++){ //对于互质的数a与p 并且p为质数 a在模p的逆元则为a^(p-2)%p  所以可以利用快速幂算法快速解出逆元 
		cout<<fpow(i,p-2,p)<<endl;		
	}
	return 0;
}